KISSY.use("dd", function(S, DD) {
	var DDM = DD.DDM, DraggableDelegate = DD.DraggableDelegate, DroppableDelegate = DD.DroppableDelegate, Proxy = DD.Proxy;
	var proxy = new Proxy({
		/**
		 * 如何产生替代节点
		 * @param drag 当前拖对象
		 */
		node : function(drag) {
			var n = S.one(drag.get("node")[0].cloneNode(true));
			n.css("opacity", 0.8);
			return n;
		},
		// 主体位置不跟随 proxy
		moveOnEnd : false,
		// 每次 proxy 都重新生成
		destroyOnEnd : true
	});
	var dragDelegate = new DraggableDelegate({
		container : "#container",
		selector : '.photo',
		move : true
	});
	proxy.attach(dragDelegate);
	var dropDelegate = new DroppableDelegate({
		container : "#container",
		selector : '.photo'
	});
	dragDelegate.on("dragover", function(ev) {
		var drag = ev.drag;
		var drop = ev.drop;
		var dragNode = drag.get("dragNode"), dropNode = drop.get("node");
		var middleDropX = (dropNode.offset().left * 1 + dropNode.width()) / 2;
		/*
		 *  算法简单说明： ev.pageX > middleDropX的情况是从左往右拖，一开始ev.pageX比较小，然后增大，
		 *  一直增大到当前鼠标位置超过dropNode的一半位置时，则交换
		 *   ev.pageX < middleDropX  的情况是从右往左拖
		 */
		if (ev.pageX > middleDropX) {
			var next = dropNode.next();
			if (next && next[0] == dragNode[0]) {
			} else {
				dragNode.insertAfter(dropNode);
			}
		} else {
			var prev = dropNode.prev();
			if (prev && prev[0] == dragNode[0]) {
			} else {
				dragNode.insertBefore(dropNode);
			}
		}
	});
});
